package DesignPattern.Builder.Singleton.Lazy;

public class LazyBiLock {
    private LazyBiLock() {
    }

    private static volatile LazyBiLock instance;

    /*
        在多线程的情况下，可能会出现空指针问题，出现问题的原因是JVM在实例化对象的时候会进行优化和指令重排序操作。
        要解决双重检查锁模式带来空指针异常的问题，只需要使用volatile关键字，volatile关键字可以保证可见性和有序性。
    */
    public static LazyBiLock getInstance() {
        if (instance == null) {
            synchronized (LazyBiLock.class) {
                if (instance == null) {
                    instance = new LazyBiLock();
                }
            }
        }
        return instance;
    }
}
